// 导入项目所需的依赖
const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const ejs = require('ejs');
const cors = require('cors');

// 创建后台程序
const app = express();

// 设置跨域共享资源
app.use(cors());
// 设置模板引擎(jade)
// app.set('views', path.join(__dirname, 'views'));
// app.set('view engine', 'jade');

// 视图渲染引擎(html)
app.set('views', path.join(__dirname, 'views'));
// 视图引擎
app.engine('html', ejs.__express);
app.set('view engine', 'html');


// 运行日志
app.use(logger('dev'));

// 解析post方式的文档
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());

// 设置静态资源目录
// 路径： 例如   /css/base.css
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'node_modules')));

// 设置路由
// api 接口
// 1) message路由
app.use('/api/message', require('./routes/api/message'));

// 2) 邮箱路由
app.use('/api/email', require('./routes/api/email'));

// 3) 用户路由
app.use('/api/user', require('./routes/api/user'));

// 4) 处理图片路由
app.use('/api/photo', require('./routes/api/photo'));

// 5) 处理导航路由
app.use('/api/classify', require('./routes/api/classify'));

// 6) 处理文章路由
app.use('/api/article', require('./routes/api/article'));

// 7) 处理文章评论
app.use('/api/comment', require('./routes/api/comment'));

// 8) 处理回复
app.use('/api/reply', require('./routes/api/reply'));

// 9) 处理收藏
app.use('/api/collect', require('./routes/api/collect'));

// 10) 管理员的路由
app.use('/api/admin', require('./routes/api/admin'));

// 11) 轮播图的路由
app.use('/api/banner', require('./routes/api/banner'));

// 12）城市的路由
app.use('/api/city', require('./routes/city'));

// 13）城市的路由
app.use('/api/signin', require('./routes/api/signin'));

// 渲染 web 页面
app.use('/', require('./routes/web/index'));


// 找不到资源404, 服务端发生异常
app.use(function(req, res, next) {
  next(createError(404));
});

// 错误处理
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};
  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

// 把当前模块挂载到系统对象 (主模块)
module.exports = app;

